package com.ranyk.www.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.ranyk.www.entity.AdminUser;
import com.ranyk.www.entity.AdminUserLoginLog;
import com.ranyk.www.exception.ValidateException;
import com.ranyk.www.pojo.dto.AdminUserPageDTO;
import com.ranyk.www.pojo.vo.AdminUserVO;
import com.ranyk.www.support.page.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * CLASS_NAME: IUserService.java <br/>
 *
 * @author ranyk           <br/>
 * @version V1.0           <br/>
 * @decription: 管理员表业务接口  <br/>
 * @date: 2022-04-03 <br/>
 */
@SuppressWarnings("unused")
public interface IAdminUserService extends IService<AdminUser> {

    /**
     * 创建管理员以及插入角色记录
     *
     * @param user     管理员信息
     * @param roleIds  角色记录ID
     * @param userName 操作人
     * @return 返回新增结果
     * @throws ValidateException 验证异常
     */
    Integer insertUser(AdminUser user, String[] roleIds, String userName) throws ValidateException;

    /**
     * 根据管理员账号查找管理员
     *
     * @param loginName 管理员账号
     * @return 返回查询结果
     */
    AdminUser getByLoginName(String loginName);

    /**
     * 根据管理员ID查找管理员信息
     *
     * @param userId 管理员ID
     * @return 返回查询结果
     */
    AdminUserVO getById(Long userId);

    /**
     * 根据管理员信息查找管理员列表
     *
     * @param userVo 查询条件
     * @return 返回查询结果
     */
    List<AdminUserVO> listByUser(AdminUserVO userVo);

    /**
     * 根据分页信息/搜索内容查找管理员列表
     *
     * @param pageInfo 分页信息
     * @param search   搜索内容
     * @return 返回查询结果
     */
    AdminUserPageDTO listByPage(PageInfo pageInfo, String search);

    /**
     * 根据组织ID查找管理员列表
     *
     * @param organizationId 组织ID
     * @return 返回查询结果
     */
    List<AdminUserVO> listByOrganizationId(Long organizationId);

    /**
     * 根据组织ID/分页信息/搜索内容查找管理员列表
     *
     * @param organizationId 组织ID
     * @param pageInfo       分页信息
     * @param search         搜索内容
     * @return 返回查询结果
     */
    AdminUserPageDTO listByOrganizationId(Long organizationId, PageInfo pageInfo, String search);

    /**
     * 更新管理员登录日志
     *
     * @param userId       管理员ID
     * @param userLoginLog 管理员登录日志
     * @return 返回更新结果
     */
    Integer updateLogById(Long userId, AdminUserLoginLog userLoginLog);

    /**
     * 更新管理员信息
     *
     * @param user 管理员信息
     * @return 返回更新结果
     */
    Integer updateByUserId(AdminUser user);

    /**
     * 更新管理员信息
     *
     * @param user     管理员信息
     * @param roleIds  角色记录ID
     * @param userName 操作人
     * @return 返回更新结果
     */
    Integer updateUser(AdminUser user, String[] roleIds, String userName);

    /**
     * 更新管理员密码
     *
     * @param nowPassword 密码
     * @param newPassword 新密码
     * @param userId      管理员ID
     * @param userName    管理员昵称
     * @return 返回更新结果
     * @throws ValidateException 抛出验证异常
     */
    Integer updatePsw(String nowPassword, String newPassword, Long userId, String userName) throws ValidateException;

    /**
     * 更新管理员状态
     *
     * @param userId 管理员ID
     * @return 返回更新结果
     */
    Integer updateStatus(Long userId);

    /**
     * 更新管理员头像
     *
     * @param userId 管理员ID
     * @param picImg 管理员头像
     * @return 返回更新结果
     */
    Integer updateAvatar(Long userId, String picImg);

    /**
     * 根据管理员ID删除管理员,同时删除角色记录、登录日志
     *
     * @param userId 管理员ID
     * @return 返回删除结果
     */
    Integer deleteByUserId(Long userId);

    /**
     * 获取管理员信息,含用户信息和用户角色信息
     *
     * @param userId 需要查询管理员的用户ID
     * @return 获取到的用户信息和用户角色信息,存放在 Map&lt;String, Object&gt; 集合中
     */
    Map<String, Object> getAdminInfo(Long userId);
}
